Enum এর জন্য Custom Serializer তৈরি

Java Technologies - জ্যাকসন (Jackson) - Enum হ্যান্ডল করা
192

Jackson Enum ডেটার Serialization (Java Enum থেকে JSON এ রূপান্তর) এবং Deserialization (JSON থেকে Java Enum এ রূপান্তর) এর জন্য ডিফল্ট পদ্ধতি ব্যবহার করে। তবে, কখনও কখনও Enum ডেটা কাস্টম ফরম্যাটে Serialize করতে হতে পারে। এ জন্য Jackson এ কাস্টম Serializer তৈরি করা হয়।


১. ডিফল্ট Serialization পদ্ধতি

Jackson ডিফল্টভাবে Enum এর name() মেথড ব্যবহার করে JSON ডেটা তৈরি করে।

উদাহরণ

public enum Status {
    ACTIVE,
    INACTIVE,
    PENDING
}

Serialization

import com.fasterxml.jackson.databind.ObjectMapper;

public class DefaultEnumSerialization {
    public static void main(String[] args) throws Exception {
        Status status = Status.ACTIVE;
        ObjectMapper mapper = new ObjectMapper();

        String json = mapper.writeValueAsString(status);
        System.out.println(json); // Output: "ACTIVE"
    }
}

২. Enum এর জন্য Custom Serializer তৈরি

স্টেপ ১: Custom Serializer ক্লাস তৈরি

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;

import java.io.IOException;

public class StatusSerializer extends StdSerializer<Status> {

    public StatusSerializer() {
        super(Status.class);
    }

    @Override
    public void serialize(Status value, JsonGenerator gen, SerializerProvider provider) throws IOException {
        // Custom Serialization Logic
        gen.writeString(value.name().toLowerCase()); // Example: ACTIVE -> "active"
    }
}

স্টেপ ২: Enum ক্লাসে Serializer সংযুক্ত করা

import com.fasterxml.jackson.databind.annotation.JsonSerialize;

@JsonSerialize(using = StatusSerializer.class)
public enum Status {
    ACTIVE,
    INACTIVE,
    PENDING
}

Serialization উদাহরণ

import com.fasterxml.jackson.databind.ObjectMapper;

public class CustomEnumSerialization {
    public static void main(String[] args) throws Exception {
        Status status = Status.ACTIVE;
        ObjectMapper mapper = new ObjectMapper();

        String json = mapper.writeValueAsString(status);
        System.out.println(json); // Output: "active"
    }
}

৩. Enum এর সাথে অতিরিক্ত ডেটা Serialize করা

স্টেপ ১: Enum এ অতিরিক্ত ফিল্ড যোগ করা

public enum Status {
    ACTIVE("The user is active"),
    INACTIVE("The user is inactive"),
    PENDING("The user is pending approval");

    private final String description;

    Status(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }
}

স্টেপ ২: Custom Serializer তৈরি

public class StatusSerializer extends StdSerializer<Status> {

    public StatusSerializer() {
        super(Status.class);
    }

    @Override
    public void serialize(Status value, JsonGenerator gen, SerializerProvider provider) throws IOException {
        gen.writeStartObject();
        gen.writeStringField("status", value.name());
        gen.writeStringField("description", value.getDescription());
        gen.writeEndObject();
    }
}

স্টেপ ৩: Serialization

@JsonSerialize(using = StatusSerializer.class)
public enum Status {
    ACTIVE("The user is active"),
    INACTIVE("The user is inactive"),
    PENDING("The user is pending approval");

    private final String description;

    Status(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }
}
import com.fasterxml.jackson.databind.ObjectMapper;

public class CustomEnumSerializationWithDetails {
    public static void main(String[] args) throws Exception {
        Status status = Status.ACTIVE;
        ObjectMapper mapper = new ObjectMapper();

        String json = mapper.writeValueAsString(status);
        System.out.println(json);
    }
}

Output:

{
  "status": "ACTIVE",
  "description": "The user is active"
}

৪. Enum এর Deserialization কাস্টমাইজ করা

Custom Deserializer তৈরি

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;

import java.io.IOException;

public class StatusDeserializer extends JsonDeserializer<Status> {

    @Override
    public Status deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        String value = p.getText().toUpperCase(); // Example: "active" -> "ACTIVE"
        return Status.valueOf(value);
    }
}

Enum ক্লাসে Deserializer সংযুক্ত করা

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

@JsonDeserialize(using = StatusDeserializer.class)
public enum Status {
    ACTIVE,
    INACTIVE,
    PENDING
}

Deserialization উদাহরণ

public class CustomEnumDeserialization {
    public static void main(String[] args) throws Exception {
        String json = "\"active\""; // JSON string

        ObjectMapper mapper = new ObjectMapper();
        Status status = mapper.readValue(json, Status.class);

        System.out.println(status); // Output: ACTIVE
    }
}

  • Custom Serializer ব্যবহার করে Enum এর ফরম্যাট কাস্টমাইজ করা যায়।
  • Custom Deserializer ব্যবহার করে JSON থেকে Enum এ ডেটা মেপিং নিয়ন্ত্রণ করা যায়।
  • এই পদ্ধতিগুলো API ডেভেলপমেন্টে, বিশেষত যেখানে Enum ডেটা হিউম্যান-রিডেবল বা কাস্টম ফরম্যাটে থাকা দরকার, সেগুলোতে কার্যকর।
Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...